Inheritance is what separates abstract data type (ADT) programming from OOP. It is not a 'dark corner' of C++ by any means. In fact, everything discussed so far could be simulated in your garden variety ADT programming language (ex: Ada, Modula-2, C [with a little work], etc). Inheritance and the consequent polymorphism are the two big additions which separate a language like Ada from an object-oriented programming language.